package com.gitee.peigenlpy.actable.manager.util;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.gitee.peigenlpy.actable.constants.Constants;
import org.noear.solon.Solon;
import org.noear.solon.annotation.Component;

import java.util.List;
import java.util.Properties;

@Component
public class ConfigurationUtil {

    private static final Properties   properties          = System.getProperties();
    /** 旧的配置key，兼容老版本用的 */
    private final        String       tableAuto           = Solon.cfg().getProperty(Constants.ACTABLE_TABLE_AUTO_KEY_VALUE, Constants.NULL);
    /** 旧的配置key，兼容老版本用的 */
    private final        List<String> modelPack           = Solon.cfg().getList(Constants.ACTABLE_MODEL_PACK_KEY_VALUE);
    /** 旧的配置key，兼容老版本用的 */
    private final        String       databaseType        = Solon.cfg().getProperty(Constants.DATABASE_TYPE_KEY_VALUE, Constants.NULL);
    /** 新的配置key */
    private final        String       actableAuto         = Solon.cfg().getProperty(Constants.ACTABLE_ACTABLE_TABLE_AUTO_KEY_VALUE, Constants.NULL);
    /** 新的配置key */
    private final        List<String> actableModelPack    = Solon.cfg().getList(Constants.ACTABLE_ACTABLE_MODEL_PACK_KEY_VALUE);
    /** 新的配置key */
    private final        String       actableDatabaseType = Solon.cfg().getProperty(Constants.ACTABLE_DATABASE_TYPE_KEY_VALUE, Constants.NULL);
    /** 指定生成索引前缀 */
    private final        String       actableIndex        = Solon.cfg().getProperty(Constants.TABLE_INDEX_KEY_VALUE, "actable_idx_");
    /** 指定生成唯一约束前缀 */
    private final        String       actableUnique       = Solon.cfg().getProperty(Constants.TABLE_UNIQUE_KEY_VALUE, "actable_uni_");

    public List<String> getConfigList(String key) {
        if (Constants.ACTABLE_ACTABLE_MODEL_PACK_KEY.equals(key) || Constants.ACTABLE_MODEL_PACK_KEY.equals(key)) {
            if (CollUtil.isNotEmpty(actableModelPack)) {
                return actableModelPack;
            } else if (CollUtil.isNotEmpty(modelPack)) {
                return modelPack;
            }
        }
        return null;
    }

    /**
     * 获取配置文件的值
     *
     * @param key properties
     *
     * @return String
     */
    public String getConfig(String key) {
        if (Constants.ACTABLE_DATABASE_TYPE_KEY.equals(key) || Constants.DATABASE_TYPE_KEY.equals(key)) {
            if (!Constants.NULL.equals(databaseType)) {
                return databaseType;
            } else if (!Constants.NULL.equals(actableDatabaseType)) {
                return actableDatabaseType;
            }
        }

        if (Constants.ACTABLE_ACTABLE_TABLE_AUTO_KEY.equals(key) || Constants.ACTABLE_TABLE_AUTO_KEY.equals(key)) {
            if (!Constants.NULL.equals(tableAuto)) {
                return tableAuto;
            } else if (StrUtil.isNotBlank(actableAuto) && !Constants.NULL.equals(actableAuto)) {
                return actableAuto;
            }
        }
        if (Constants.TABLE_INDEX_KEY.equals(key) && !Constants.NULL.equals(Solon.cfg().getProperty(Constants.TABLE_INDEX_KEY_VALUE))) {

            return Solon.cfg().getProperty(Constants.TABLE_INDEX_KEY_VALUE);
        }
        if (Constants.TABLE_UNIQUE_KEY.equals(key) && !Constants.NULL.equals(Solon.cfg().getProperty(Constants.TABLE_UNIQUE_KEY_VALUE))) {
            return Solon.cfg().getProperty(Constants.TABLE_UNIQUE_KEY_VALUE);
        }
        Object object = null;
        if (Constants.ACTABLE_DATABASE_TYPE_KEY.equals(key) || Constants.DATABASE_TYPE_KEY.equals(key)) {
            object = properties.get(Constants.DATABASE_TYPE_KEY);
            if (null == object) {
                object = properties.get(Constants.ACTABLE_DATABASE_TYPE_KEY);
            }
        }
        if (Constants.ACTABLE_ACTABLE_MODEL_PACK_KEY.equals(key) || Constants.ACTABLE_MODEL_PACK_KEY.equals(key)) {
            object = properties.get(Constants.ACTABLE_MODEL_PACK_KEY);
            if (null == object) {
                object = properties.get(Constants.ACTABLE_ACTABLE_MODEL_PACK_KEY);
            }
        }
        if (Constants.ACTABLE_ACTABLE_TABLE_AUTO_KEY.equals(key) || Constants.ACTABLE_TABLE_AUTO_KEY.equals(key)) {
            object = properties.get(Constants.ACTABLE_TABLE_AUTO_KEY);
            if (null == object) {
                object = properties.get(Constants.ACTABLE_ACTABLE_TABLE_AUTO_KEY);
            }
        }
        if (Constants.TABLE_INDEX_KEY.equals(key)) {
            object = properties.get(Constants.TABLE_INDEX_KEY);
        }
        if (Constants.TABLE_UNIQUE_KEY.equals(key)) {
            object = properties.get(Constants.TABLE_UNIQUE_KEY);
        }
        return object == null ? null : (String) object;
    }

}
